/**
 *
 */
package com.honeybees.framework.spring.mvc.model;

import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.annotation.JSONField;

/**
 * <dl>
 * <dt><b> 响应前端信息 </b></dt>
 * <p>
 * <dd>功能描述</dd>
 * </dl>
 * <p>
 * Copyright (C) All rights reserved.
 * </p>
 *
 * @author 李远明
 * @version 2017-04-08 20:53 framework
 * @since 2015-10-23 15:10:23 新建
 */
public class ReturnMessage extends ModelSupport {

    /**
     * 序列化版本号
     */
    private static final long serialVersionUID = -4222136784343330125L;

    /**
     * 返回状态码
     * <p>
     * 000000-成功，999999-失败
     */
    private String code;
    /**
     * 返回消息内容
     */
    private Object message;

    /**
     * @version 2017-03-15 09:12:24 用于返回附加数据
     */
    //@JSONField(serialzeFeatures = SerializerFeature.IgnoreNonFieldGetter)
    private Map<String, Object> data;

    /**
     * 返回状态码
     * <p>
     * 000000-成功，999999-失败
     */
    public String getCode() {
        return code;
    }

    /**
     * 返回状态码
     * <p>
     * 000000-成功，999999-失败
     */
    public void setCode(String code) {
        this.code = code;
    }

    /**
     * 返回消息内容
     */
    public Object getMessage() {
        return message;
    }

    /**
     * 返回消息内容
     */
    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * 返回消息内容
     */
    public void setMessage(boolean message) {
        this.message = message;
    }

    /**
     * 返回消息内容
     */
    public void setMessage(long message) {
        this.message = message;
    }

    /**
     * 返回消息内容
     */
    public void setMessage(Object message) {
        this.message = message;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

    public ReturnMessage() {
        super();
    }

    /**
     * 返回信息
     *
     * @param code    状态码
     * @param message 信息内容
     */
    public ReturnMessage(String code, Object message) {
        super();
        this.code = code;
        this.message = message;
    }

	/*
     * 常用的响应信息 2016-08-16 11:40
	 ****************************************************************
	 */

    /**
     * 成功返回码
     */
    public static final String CODE_DONE = "000000";
    /**
     * 失败返回码
     */
    public static final String CODE_FAIL = "999999";

    /**
     * 成功信息
     *
     * @version 2016-08-16 10:40:38 从 WebController 中移到这里
     * @see #CODE_DONE
     */
    public static final ReturnMessage DONE_MESSAGE = new ReturnMessage(CODE_DONE, "操作成功");
    /**
     * 失败信息
     *
     * @version 2016-08-16 10:40:38 从 WebController 中移到这里
     * @see #CODE_FAIL
     */
    public static final ReturnMessage FAIL_MESSAGE = new ReturnMessage(CODE_FAIL, "操作失败");

    /**
     * 是否成功
     *
     * @return true-成功，false-失败
     * @version 2017-03-15 09:09:23
     */
    @JSONField(serialize = false)
    public boolean isDone() {
        return CODE_DONE.equals(code);
    }

    /**
     * 添加数据
     *
     * @param key   健
     * @param value 值
     * @author 李远明
     * @version 2017-03-15 09:21:44
     */
    public synchronized void addData(String key, Object value) {
        initData();
        data.put(key, value);
    }

    /**
     * 初始化数据
     *
     * @author 李远明
     * @version 2017-03-15 09:16:46
     */
    public synchronized void initData() {
        if (data == null) {
            data = new HashMap<>();
        }
    }

    /**
     * @return 所有附加数据
     * @author 李远明
     * @version 2017-03-15 09:18:10
     */
    public Map<String, Object> getData() {
        return data;
    }

    /**
     * 得到数据值
     *
     * @param key 键
     * @return 值
     * @author 李远明
     * @version 2017-03-15 09:19:38
     */
    public Object getDataValue(String key) {
        return data == null ? null : data.get(key);
    }

}
